/* 
 * File:   Anilla.hpp
 * 
 * Este header representa el objeto Anilla y define sus propiedades.
 */

#ifndef ANILLA_HPP
#define	ANILLA_HPP

#include "Nave.hpp"

/* Una anilla es un tipo de ObjetoGrafico con propiedades particulares */
class Anilla : public ObjetoGrafico {
public:

    /**
     * Constructor de la clase Anilla.
     * 
     * @param n : Apuntador a un objeto Nave con la que debe revisar colisiones.
     * @param p : Anilla Previa con la cual debe mantener apariencia de tunel.
     * @param w : Limite en el eje X.
     * @param h : Limite en el eje Y.
     */
    Anilla(Nave* n, Anilla* p, int w, int h);


    /* Este metodo dibuja la Anilla en la escena.*/
    virtual void dibujar();

    /**
     * Este metodo idle permite a la Anilla moverse y realizar los
     * calculos de colision
     * @param s : El frameskip actual.
     */
    void idle(int s);

    Anilla* prevAnilla; // anilla anterior
    void print(); // funcion debug


private:
    /**
     *  Le asigna una nueva posicion a la anilla de manera semi aleatoria
     * efectivamente reutilizandola.
     *  
     */
    virtual void newPos();

    /**
     * Esta funcion auxiliar calcula la magnitud de un vector con origen en (0,0).
     *  
     * @param x : La posicion del punto en el eje X.
     * @param y : La posicion del punto en el eje Y.
     * @return El modulo del vector.
     */
    virtual float Vlenght(float x, float y); //funcion auxiliar

    bool on; // indica si la anilla fue atravezada.
    GLfloat maxX; //limite maximo en X (positivo y negativo)
    GLfloat maxY; //limite maximo en Y (positivo y negativo)
    Nave* nave; // nave que debe atravezar la anilla
};


#endif	/* ANILLA_HPP */

